package com.tuling.service.impl;

import com.tuling.common.Result;
import com.tuling.mapper.UserMapper;
import com.tuling.pojo.User;
import com.tuling.pojo.UserExample;
import com.tuling.service.UserService;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.Date;
import java.util.List;

@Service
public class UserServiceImpl implements UserService {

    private Logger logger = LoggerFactory.getLogger(UserServiceImpl.class);

    @Resource
    private UserMapper userMapper;

    /**
     * 修改用户密码
     *
     * @param userName    用户名
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 布尔值
     */
    @Override
    public Result<Boolean> updatePassword(String userName, String oldPassword, String newPassword) {
        if (StringUtils.isBlank(userName)) {
            return Result.fail("用户名为空");
        }
        // 根据旧密码查询数据
        UserExample userExample = new UserExample();
        UserExample.Criteria criteria = userExample.createCriteria();
        criteria.andNameEqualTo(userName).andPasswordEqualTo(oldPassword);
        List<User> users = userMapper.selectByExample(userExample);
        if (CollectionUtils.isEmpty(users)) {
            return Result.fail("查询用户信息为空");
        }
        // 修改，不考虑list为多条数据的情况，名字都是Q1-95-天宇这种的，不会重复，不用管墨菲定律，内部系统几个人用
        User user = users.get(0);
        user.setPassword(newPassword);
        userMapper.updateByPrimaryKey(user);
        return Result.ok(true);
    }

    /**
     * 根据用户名密码获取用户信息
     */
    @Override
    public List<User> queryUser(UserExample userExample) {
        return userMapper.selectByExample(userExample);
    }

    /**
     * 维护用户回答时间与回答次数
     */
    @Override
    public void updateTimeAndNum(User user) {
        user.setLastAnswerTime(new Date());
        if (user.getParticipateNum() == null) {
            user.setParticipateNum(1);
        } else {
            user.setParticipateNum(user.getParticipateNum() + 1);
        }
        userMapper.updateByPrimaryKey(user);
    }
}
